Arduino-Powered (Clothes) Dryer
'WARNING: MODIFYING YOUR HOME APPLIANCES HAS THE POTENTIAL FOR ' "FREEZING YOUR PIPES, KILLING YOUR PLANTS AND PETS, BURNING DOWN YOUR HOUSE," AND LAST BUT NOT LEAST, KILLING SOMEONE. DO NOT LET YOUR DRYER OPERATE UNATTENDED. UNPLUG ALL APPLIANCES WHEN NOT IN USE. WEAR APPROPRIATE PROTECTION AT ALL TIMES. TAKE YOUR UMBRELLA IF THE FORECAST CALLS FOR RAIN. DO NOT RUN WITH SISSORS. NO WARRANTY IS EXPRESSED OR IMPLIED. PROCEED AT YOUR OWN RISK! THERE BE DRAGONS! Jeremy Mitts 10/08/2012 Last Wednesday, the timer motor on our dryer quit spinning, so the dryer was operating on "manual" for a few days. I had all the parts, so I decided to go ahead and Arduinoize the thing over the weekend. "Manual" in this case means "you better remember you turned it on because it isn't going to go off on its own." My wife asks: "is it better now?" and my honest answer is that we're trading mechincal problems (timer motor stops spinning) for electrical problems (my code on Arduino is buggy, Arduino is confused about the button being pressed when there is no one pressing it) and honestly, given that the mechanical solution has worked for about 17 years it was probably the better solution. But making the controls work the way I want, and communication with the outside world just begs for an electrical solution. The first step to the mechincal-timer-to-Arduino-conversion was getting into the top panel- this isn't too hard as it's designed almost eactly like the washing machine. There are two screws, one on the left and one on the right that have to be removed and then the entire top panel will flip up and back. Once inside, there isn't much to see. There are two wires going to the "Start" button (white-red and black) and five wires going to the timer. The wires to the timer, according to the schematic, are: black, blue, red, orange-white and violet. The orange-white and violet are a pair that work with the timer motor to get the timer to spin at various points in the cycles, so I didn't need those at all and just capped them off. The black wire (on the timer) is a common AC power wire, the blue goes to the motor run winding and the red goes down to the controls for the burner. This red-wire-to-flame design is handy for me: all of the temperature controls, including the (non-resettable) over-heating fuse, are down at the burner and we don't have to worry about them. Send 120 VAC down the red wire and if the motor is going it will attempt to make a flame and keep the dryer between 150-155 degrees F. My goal was to have the dryer operation be as simple as possible. We never use any cycle except for timed heat (I guess we either don't have "delicates" or they just hang up to dry?) so all we need is a dryer that will run for 40, 60, or 80* minutes and shut itself off. Ideally, it would tell us it is done (our dryer isn't a model with an I'm-done buzzer.) Before I forget, I have to mention the door switch. The door switch is connected down to the motor wiring with a blue and white pair of #16 wire. For my purposes, I need to know if the door is open or closed, so I hijacked the original wires going to it and connected them together so that the motor will always see the door as shut. Then I ran two new wires from the switch (not literally, but electrically...) back up and out the top so they can be connected to the Arduino. This leaves us with essentially five switches we care about. The start button for the user (input), the door switch (input), the start button for the motor (output), the motor run winding (output), and the flame control (output). The motor has a start winding, a run winding, and a centrifugal switch that should disengage the start winding when the motor is up to speed. The white-red wire from the "Start" button goes down to the start winding-- almost. For starting, the original Start button is normally open, so pressing it sends power (if the timer controller is in the right position) to the motor's start windings and gets it spinning. After about 500-1500ms the centrifugal switch kicks the power over to the main windings (or just disconnects it from the start windings, depending on the design) and the Start button can be released. This was kind of a nuisance-- the weight of the clothes in the drum would determine how long you had to hold in the button to get it going, a one-count would usually do it but if you are in a hurry and you don't hold it down long enough it doesn't start and you have to try again. Now, looking back, I probably could have just tied the white-red and black together so that the dryer would see the button as always pressed, but a part of me isn't convinced (or doesn't trust) that the centrifugal switch is really disengaging the start windings, and you don't want them to be powered all the time for various reasons. Besides all that, I had three solid-state relays left over from another project so I have the Arduino programmed to "press the start button" just like a real person would have. So the original Start button is now connected to the terminal strip that connects to the Arduino (it's in positions 1 and 2 if you're curious) and the wires from the original Start button (white-red and black, remember?) are connected to solid-state relay number 1, on the left. The flame is only supposed to try to come on if the motor is spinning -- in fact, if you put power from black to red without the motor spinning the dryer makes a noise that clearly says "I do not like that." Becasue of this, I wired the black to connect to blue for the motor, and then blue to red for the flame. The relay on the right controls power from black to blue (it turns on the motor) and the relay in the middle controls power from blue to red (it turns on the heat). These solid state relays are really great- they are rated 10A at 250VAC and operate on 5vdc. They hardly use any power to operate at all. I've used power tails in the past, but at $10/each second-hand from Affiliated they're a bargain. Plus, the power tails use a real mechanical relay that makes quite a click. I think their amperage rating may be higher, but nothing I ever need to switch pulls more than a few amps. On the terminal strip, the even-numbered positions are all connected to the Arduino ground. The odd numbered positions are connected to digital i/o pins. I'm using the Arduino's internal pull-up resistors for the two switches, but I'm going to install an external resistor becuase about once a day the Arduino thinks the button has been pressed when no one is around. Until I do that, we leave the door open to keep it from drying nothing for 40 mintues at a time. Usage: sketch to come Dryer off-- Push the button with the door open or closed. A timer is set for 40 minutes. If the door is open, the cycle is paused, if it is closed the cycle starts. Dryer on-- Pushing the button with the door closed will add 20 minutes to the cycle time, from 40 to 60, from 60 to 80, from 80 to 20, from 20 to 40, and so on. Once the part comes in, the remaining time will be displayed on a two-digit seven-segment display. If the button is pressed with the door open, the cycle will cancel (the display will flash "00" and then turn off). Opening the door and closing it again will cause the cycle to pause while the door is open (the display will flash the remaining time while the cycle is paused) and resume when it is closed, without any other user intervention. Other functions-- If the dryer is running and the door is opened, the motor is stopped (this happens just as fast as it did with the original mechanical controls). If the door is closed again, the cycle will automatically resume. Future work on this project: *Code a cool-down ("anti-wrinkle") period at the end of the cycle where the motor runs but the heat is off. *Add led display to show remaining time. (it's going to go in the middle of the big round now-useless knob) *Connect XBee radio to allow communication with the rest of the house. *Add photo-resistor to determine the linty-ness of the lint screen. (the kids forget to clean it off) *Look into humidity sensor to determine when clothes are as dry as they are going to get. *Maybe design a permanent-press cycle that alternates the heat on and off to reduce overall hotness applied to wrinkle-free clothing. * - most clothes: 40 minutes, jeans: 60 minutes, blankets: 80 minutes